import request from '@/utils/request';
import type { GepParameter, GepResult } from 'api/types/gep';

// 定义 GEP 参数相关 API 的基础路径
const prefix_para = '/api/gep-parameters/gep_parameters';

/**
 * 新增一个 GEP 参数配置
 * @param data - 要新增的 GEP 参数对象
 * @returns Promise<void>
 */
export const addGepParameter = (data: GepParameter) =>
    request.post(prefix_para, data);

/**
 * 根据年份、城市、区县、乡镇新增 GEP 参数配置
 * @param year - 年份
 * @param city - 城市名称
 * @param district - 区县名称
 * @param town - 乡镇名称
 * @param data - 需要更新的数据对象
 * @returns Promise<GepParameter>
 */
export const addGepParameterByPath = (year: number, city: string, district: string, town: string, data: Partial<GepParameter>) =>
    request.post<GepParameter>(`${prefix_para}_by_fields/${year}/${encodeURIComponent(city)}/${encodeURIComponent(district)}/${encodeURIComponent(town)}`, data);


/**
 * 获取所有 GEP 参数配置列表
 * @returns Promise<GepParameter[]>
 */
export const getGepParameters = () =>
    request.get<GepParameter[]>(prefix_para);

/**
 * 根据 ID 获取指定的 GEP 参数详情
 * @param id - 参数唯一标识
 * @returns Promise<GepParameter>
 */
export const getGepParameter = (id: number) =>
    request.get<GepParameter>(`${prefix_para}/${id}`);


/**
 * 根据年份、城市、区县、乡镇获取 GEP 参数配置
 * @param year - 年份
 * @param city - 城市名称
 * @param district - 区县名称
 * @param town - 乡镇名称
 * @returns Promise<GepParameter>
 */
export const getGepParameterByPath = (year: number, city: string, district: string, town: string) => {
    // 检查参数是否为空
    if (!city || !district || !town) {
        return Promise.reject(new Error('城市、区县、乡镇参数不能为空'));
    }
    return request.get<GepParameter>(`${prefix_para}_by_fields/${year}/${encodeURIComponent(city)}/${encodeURIComponent(district)}/${encodeURIComponent(town)}`);
}
/**
 * 更新指定 ID 的 GEP 参数信息
 * @param id - 参数唯一标识
 * @param data - 需要更新的字段（可选）
 * @returns Promise<void>
 */
export const updateGepParameter = (id: number, data: Partial<GepParameter>) =>
    request.put(`${prefix_para}/${id}`, data);


/**
 * 根据年份、城市、区县、乡镇更新 GEP 参数配置
 * @param year - 年份
 * @param city - 城市名称
 * @param district - 区县名称
 * @param town - 乡镇名称
 * @param data - 需要更新的数据对象
 * @returns Promise<GepParameter>
 */
export const updateGepParameterByPath = (year: number, city: string, district: string, town: string, data: Partial<GepParameter>) =>
    request.put<GepParameter>(`${prefix_para}_by_fields/${year}/${encodeURIComponent(city)}/${encodeURIComponent(district)}/${encodeURIComponent(town)}`, data);



/**
 * 删除指定 ID 的 GEP 参数
 * @param id - 参数唯一标识
 * @returns Promise<void>
 */
export const deleteGepParameter = (id: number) =>
    request.delete(`${prefix_para}/${id}`);


// 定义 GEP 结果相关 API 的基础路径
const prefix_res = '/api/gep-results/gep_results';

/**
 * 新增一个 GEP 计算结果
 * @param data - 要新增的 GEP 结果对象
 * @returns Promise<void>
 */
export const addGepResult = (data: GepResult) =>
    request.post(prefix_res, data);

/**
 * 获取所有 GEP 计算结果列表
 * @returns Promise<GepResult[]>
 */
export const getGepResults = () =>
    request.get<GepResult[]>(prefix_res);

/**
 * 根据 ID 获取指定的 GEP 结果详情
 * @param id - 结果唯一标识
 * @returns Promise<GepResult>
 */
export const getGepResult = (id: number) =>
    request.get<GepResult>(`${prefix_res}/${id}`);

/**
 * 更新指定 ID 的 GEP 结果信息
 * @param id - 结果唯一标识
 * @param data - 需要更新的字段（可选）
 * @returns Promise<void>
 */
export const updateGepResult = (id: number, data: Partial<GepResult>) =>
    request.put(`${prefix_res}/${id}`, data);

/**
 * 删除指定 ID 的 GEP 结果
 * @param id - 结果唯一标识
 * @returns Promise<void>
 */
export const deleteGepResult = (id: number) =>
    request.delete(`${prefix_res}/${id}`);

/**
 * 根据年份、城市、区县、乡镇获取 GEP 计算结果
 * @param year - 年份
 * @param city - 城市名称
 * @param district - 区县名称
 * @param town - 乡镇名称
 * @returns Promise<GepResult>
 */
export const getGepResultByPath = (year: number, city: string, district: string, town: string) => {
    // 检查参数是否为空
    if (!city || !district || !town) {
        return Promise.reject(new Error('城市、区县、乡镇参数不能为空'));
    }
    return request.get<GepResult>(`${prefix_res}_by_fields/${year}/${encodeURIComponent(city)}/${encodeURIComponent(district)}/${encodeURIComponent(town)}`);
}
/**
 * 根据年份、城市、区县、乡镇新增 GEP 计算结果
 * @param year - 年份
 * @param city - 城市名称
 * @param district - 区县名称
 * @param town - 乡镇名称
 * @param data - 需要更新的数据对象
 * @returns Promise<GepResult>
 */
export const addGepResultByPath = (year: number, city: string, district: string, town: string, data: Partial<GepResult>) =>
    request.post<GepResult>(`${prefix_res}_by_fields/${year}/${encodeURIComponent(city)}/${encodeURIComponent(district)}/${encodeURIComponent(town)}`, data);


/**
 * 根据年份、城市、区县、乡镇更新 GEP 计算结果
 * @param year - 年份
 * @param city - 城市名称
 * @param district - 区县名称
 * @param town - 乡镇名称
 * @param data - 需要更新的数据对象
 * @returns Promise<GepResult>
 */
export const updateGepResultByPath = (year: number, city: string, district: string, town: string, data: Partial<GepResult>) =>
    request.put<GepResult>(`${prefix_res}_by_fields/${year}/${encodeURIComponent(city)}/${encodeURIComponent(district)}/${encodeURIComponent(town)}`, data);


/**
 * 根据年份、城市、区县、乡镇删除 GEP 计算结果
 * @param year - 年份
 * @param city - 城市名称
 * @param district - 区县名称
 * @param town - 乡镇名称
 * @returns Promise<void>
 */
export const deleteGepResultByPath = (year: number, city: string, district: string, town: string) =>
    request.delete(`${prefix_res}_by_fields/${year}/${encodeURIComponent(city)}/${encodeURIComponent(district)}/${encodeURIComponent(town)}`);


// 获取GEP展示数据
export function getGepShowcaseData(year:any) {
    return request({
        url: '/api/gep-results/showcase-data',
        method: 'get',
        params: {
            year: year,
            gepCity: '上饶市',
            gepDistrict: '铅山县'
        }
    })
}
